package com.jerem.gwt.bredgolf.server;

import java.util.ArrayList;
import java.util.List;
import java.util.logging.Logger;

import javax.jdo.PersistenceManager;
import javax.jdo.PersistenceManagerFactory;
import javax.jdo.Query;

import com.google.gwt.user.server.rpc.RemoteServiceServlet;
import com.jerem.gwt.bredgolf.client.GolfClub;
import com.jerem.gwt.bredgolf.client.GolfClubService;
import com.jerem.gwt.bredgolf.client.GolfParcours;

public class GolfClubImpl extends RemoteServiceServlet implements GolfClubService {

	private static final Logger LOG = Logger.getLogger(GolfClubImpl.class.getName());
	private static final PersistenceManagerFactory PMFInstance = PMF.get();
	
	private PersistenceManager getPersistenceManager() {
	    return PMFInstance.getPersistenceManager();
	}

	@Override
	public void createClub(GolfClub golfClub) {
		PersistenceManager pm = getPersistenceManager();
	    try {
	    	  List<GolfParcours> listeParcours = golfClub.getListeParcours();
	          List<GolfParcoursDTO> listeParcoursDTO = new ArrayList<GolfParcoursDTO>();
	          for (GolfParcours parcours : listeParcours) {
	        	  GolfParcoursDTO unParcoursDTO = new GolfParcoursDTO();
	        	  unParcoursDTO.setCouleur(parcours.getCouleur());
	        	  unParcoursDTO.setSlope(parcours.getSlope());
	        	  unParcoursDTO.setSSS(parcours.getSSS());
	        	  unParcoursDTO.setTabDistance(parcours.getTabDistance());
	        	  unParcoursDTO.setTabHcp(parcours.getTabHcp());
	        	  unParcoursDTO.setTabPar(parcours.getTabPar());
	        	  listeParcoursDTO.add(unParcoursDTO);
	          }
	          
	          GolfClubDTO golfClubDTO = new GolfClubDTO(golfClub.getNom(), 
		    		  									golfClub.getAdresse(), 
		    		  									golfClub.getTel(),
		    		  									golfClub.getLattitude(),
		    		  									golfClub.getLongitude(),
		    		  									listeParcoursDTO);
	      pm.makePersistent(golfClubDTO);
	    } finally {
	      pm.close();
	    }		
	}

	@Override
	public void deleteClub(GolfClub golfClub) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public List<GolfClub> getListeClubs() {
		
		List<GolfClub> results = new ArrayList<GolfClub>();
		PersistenceManager pm = getPersistenceManager();
	    try {
	      Query q = pm.newQuery(GolfClubDTO.class);
	      List<GolfClubDTO> listeClubsDTO = (List<GolfClubDTO>) q.execute();
	      for (GolfClubDTO clubDTO : listeClubsDTO) {
	    	  GolfClub unClub = new GolfClub();
	    	  unClub.setId(clubDTO.getId().getId());
	          unClub.setNom(clubDTO.getNom());
	          unClub.setAdresse(clubDTO.getAdresse());
	          unClub.setTel(clubDTO.getTel());
	          unClub.setLattitude(clubDTO.getLattitude());
	          unClub.setLongitude(clubDTO.getLongitude());
	          List<GolfParcoursDTO> listeParcoursDTO = clubDTO.getListeParcours();
	          List<GolfParcours> listeParcours = new ArrayList<GolfParcours>();
	          for (GolfParcoursDTO parcoursDTO : listeParcoursDTO) {
	        	  GolfParcours unParcours = new GolfParcours();
	        	  unParcours.setId(parcoursDTO.getId().getId());
	        	  unParcours.setCouleur(parcoursDTO.getCouleur());
	        	  unParcours.setSlope(parcoursDTO.getSlope());
	        	  unParcours.setSSS(parcoursDTO.getSSS());
	        	  unParcours.setTabDistance(parcoursDTO.getTabDistance());
	        	  unParcours.setTabHcp(parcoursDTO.getTabHcp());
	        	  unParcours.setTabPar(parcoursDTO.getTabPar());
	        	  listeParcours.add(unParcours);
	          }
	          unClub.setListeParcours(listeParcours);
	          results.add(unClub);
	      }
	    } finally {
	      pm.close();
	    }
	    return results;
	}

}
